#include <pcl/io/openni_grabber.h>
#include <pcl/visualization/cloud_viewer.h>
//#ifdef _WIN32
//# define sleep(x) Sleep((x)*1000)
//#endif

class SimpleOpenNIViewer
{
public:
	SimpleOpenNIViewer () : viewer ("PCL OpenNI Viewer") {}

	void cloud_cb_ (const pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr &cloud)
	{
		if (!viewer.wasStopped())
			viewer.showCloud (cloud);
	}

	void run ()
	{
		pcl::Grabber* interface = new pcl::OpenNIGrabber();

		boost::function<void (const pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr&)> f =
			boost::bind (&SimpleOpenNIViewer::cloud_cb_, this, _1);

		interface->registerCallback (f);

		interface->start ();

		while (!viewer.wasStopped())
		{
			//boost::this_thread::sleep (boost::posix_time::seconds (1));
		}

		interface->stop ();
	}

	pcl::visualization::CloudViewer viewer;
};

int main ()
{
	SimpleOpenNIViewer v;
	v.run ();
	return 0;
}